feat(resolve): model skills as directories instead of single files - #2139
Conversation
|
🤖 Finished Review · ✅ Success · Started 8:36 PM UTC · Completed 8:52 PM UTC |
Site previewPreview: https://eb6438eb-site.fullsend-ai.workers.dev Commit: |
ReviewFindingsLow
Info
Previous runReviewFindingsMedium
Low
Info
Previous run (2)ReviewFindingsMedium
Low
Info
Previous run (3)ReviewFindingsMedium
Low
Info
Previous run (4)ReviewFindingsMedium
Low
Previous run (5)ReviewFindingsMedium
Low
Previous run (6)ReviewFindingsMedium
Low
Info
Previous run (7)ReviewFindingsCritical
Medium
Low
Info
Previous runReviewFindingsHigh
Medium
Low
Info
Previous run (8)ReviewFindingsCritical
Medium
Low
Info
Previous run (9)ReviewFindingsHigh
Medium
Low
Info
|
ralphbean
left a comment
There was a problem hiding this comment.
LGTM. A few non-blocking notes inline.
c5cf3d5 to
4439417
Compare
|
🤖 Finished Review · ✅ Success · Started 9:11 PM UTC · Completed 9:26 PM UTC |
4439417 to
a2a7fe2
Compare
|
🤖 Finished Review · ✅ Success · Started 9:39 PM UTC · Completed 9:55 PM UTC |
a2a7fe2 to
6602b2f
Compare
|
🤖 Finished Review · ✅ Success · Started 10:01 PM UTC · Completed 10:17 PM UTC |
6602b2f to
164bd37
Compare
|
🤖 Finished Review · ✅ Success · Started 10:25 PM UTC · Completed 10:39 PM UTC |
164bd37 to
63ad88f
Compare
|
🤖 Finished Review · ✅ Success · Started 10:56 PM UTC · Completed 11:09 PM UTC |
7b84082 to
0ca1894
Compare
0ca1894 to
7c4ab01
Compare
|
🤖 Review · Started 12:16 AM UTC |
28d23ec to
759c0de
Compare
|
🤖 Finished Review · ✅ Success · Started 12:20 AM UTC · Completed 12:33 AM UTC |
759c0de to
af01b7a
Compare
Skills are directories (SKILL.md + companion files), not single files. Update the resolver, forge client, and cache to handle directory-type skill dependencies: list directory contents via forge API, cache as tree with integrity hash, and return directory paths to the runtime. - Add ListDirectoryContents and GetFileContentAtRef to forge.Client - Add directory cache (CachePutDir/CacheGetDir) with tree hash - Add ParseForgeURL for extracting owner/repo/path/ref from GitHub URLs - Split skill resolution from file resolution in the resolver - Add Type field to lock entries for directory vs file dependencies - Use resolveToken() pattern for GitHub token resolution in CLI - Add safety limits: maxDirDepth(10), maxDirAPIcalls(100), maxDirFiles(1000) - Update glossary, ADR-0024, and customizing-agents guide Signed-off-by: Claude <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
af01b7a to
826f132
Compare
|
🤖 Finished Review · ✅ Success · Started 12:54 AM UTC · Completed 1:05 AM UTC |
|
🤖 Finished Retro · ✅ Success · Started 2:10 AM UTC · Completed 2:16 AM UTC |
Retro: PR #2139 — feat(resolve): model skills as directoriesWhat happenedHuman-authored PR by Timeline:
AssessmentThe review agent provided genuinely useful feedback — the path traversal containment check, URL escaping fix, and lock test coverage additions were all surfaced by the bot and addressed by the author. However, 10 full review runs to converge is excessive, especially when a human had already approved by run #1. The core problems observed are:
Existing coverageAll major improvement areas are already tracked by open issues:
No new proposals are warranted — the existing issue backlog comprehensively covers the patterns observed. Prioritizing implementation of #981 (concurrency groups), #2115 (COMMENT verdict for human PRs), and #1552 (incremental reviews) would have the highest impact on reducing the churn seen in this PR. |
Summary
ListDirectoryContents/GetFileContentAtRef) to list and fetch skill directory contents, caches reconstructed trees under<hash>/tree/, and rejects non-forge HTTPS URLs for skillsForgeURLInfoparser, directory cache (ComputeTreeHash/CachePutDir/CacheGetDir),Type/Filesfields to lock entries, and forge URL validation for skill URLsTest plan
SkillDirFetchAndCache,SkillDirCacheHit,SkillDirHashMismatch,SkillNonForgeURLRejected,SkillDirOfflineMiss,SkillDirOfflineHit,NilForgeClientWithSkillURLgo test ./...— all packages passgo vet ./...— cleanmake lint— all hooks pass🤖 Generated with Claude Code